home *** CD-ROM | disk | FTP | other *** search
- .186
- name sieve
- _text segment byte public 'code'
- dgroup group _data,_bss
- assume cs:_text,ds:dgroup,ss:dgroup
- _text ends
- _data segment word public 'data'
- _d@ label byte
- _data ends
- _bss segment word public 'bss'
- _b@ label byte
- _bss ends
- _data segment word public 'data'
- public _flags
- _flags label byte
- db 0
- db 8190 dup (?)
- _data ends
- _text segment byte public 'code'
- ;|***
- ;|*** /* Eratosthenes Sieve Prime Number Program in C, Byte January 1983.
- ;|*** * The code has been corrected to produce primes correctly.
- ;|*** */
- ;|*** #include <stdio.h>
- ;|***
- ;|*** #define TRUE 1
- ;|*** #define FALSE 0
- ;|*** #define NITER 150
- ;|*** #define SIZE 8190
- ;|***
- ;|*** char flags[SIZE+1]={0};
- ;|***
- ;|***
- ;|*** main ()
- ;|*** {
- ; Line 16
- _main proc near
- push si
- push di
- enter 4,0
- ;|*** register int i,k;
- ; Line 17
- ;|*** int iter, count;
- ; Line 18
- ;|***
- ; Line 19
- ;|*** printf ("%d iterations: ", NITER);
- ; Line 20
- db 104 ; push immediate
- dw 150
- mov ax,offset _s@
- push ax
- call near ptr _printf
- add sp,4
- ;|***
- ; Line 21
- ;|*** for( iter = 1; iter <= NITER; iter++ ) /* Do sieve 150 times */
- ; Line 22
- mov word ptr [bp-4],1
- jmp short @5
- @4:
- ;|*** {
- ; Line 23
- ;|*** count = 0;
- ; Line 24
- mov word ptr [bp-2],0
- ;|*** for( i = 0; i <= SIZE; i++) /* set all flags true */
- ; Line 25
- xor si,si
- jmp short @9
- @8:
- ;|*** flags[i] = TRUE;
- ; Line 26
- mov byte ptr dgroup:_flags[si],1
- inc si
- @9:
- cmp si,8190
- jle @8
- ;|***
- ; Line 27
- ;|*** for( i = 2; i <= SIZE; i++ )
- ; Line 28
- mov si,2
- jmp short @13
- @12:
- ;|*** {
- ; Line 29
- ;|*** if ( flags[i] ) /* found a prime */
- ; Line 30
- cmp byte ptr dgroup:_flags[si],0
- je @11
- ;|*** {
- ; Line 31
- ;|*** for ( k = i + i; k <= SIZE; k += i )
- ; Line 32
- mov di,si
- add di,si
- jmp short @18
- @17:
- ;|*** flags[k] = FALSE; /* Cancel its multiples */
- ; Line 33
- mov byte ptr dgroup:_flags[di],0
- add di,si
- @18:
- cmp di,8190
- jle @17
- ;|*** count++;
- ; Line 34
- inc word ptr [bp-2]
- ;|*** }
- ; Line 35
- ;|*** }
- ; Line 36
- @11:
- inc si
- @13:
- cmp si,8190
- jle @12
- ;|*** }
- ; Line 37
- inc word ptr [bp-4]
- @5:
- cmp word ptr [bp-4],150
- jle @4
- ;|***
- ; Line 38
- ;|*** printf ("%d primes\n", count);
- ; Line 39
- push word ptr [bp-2]
- mov ax,offset _s@+16
- push ax
- call near ptr _printf
- add sp,4
- ;|***
- ; Line 40
- ;|*** exit(0);
- ; Line 41
- db 106 ; push immediate
- db 0
- call near ptr _exit
- inc sp
- inc sp
- ;|***
- ; Line 42
- ;|*** }
- ; Line 43
- leave
- pop di
- pop si
- ret
- _main endp
- _text ends
- _data segment word public 'data'
- _s@ label byte
- db 37
- db 100
- db 32
- db 105
- db 116
- db 101
- db 114
- db 97
- db 116
- db 105
- db 111
- db 110
- db 115
- db 58
- db 32
- db 0
- db 37
- db 100
- db 32
- db 112
- db 114
- db 105
- db 109
- db 101
- db 115
- db 10
- db 0
- _data ends
- _text segment byte public 'code'
- extrn _exit:near
- extrn _printf:near
- public _main
- _text ends
- end
-